const mongodb = require('./db')
const marked = require('marked')

function Post(name, title, post,category,pub) {
  this.name = name;
  this.title = title;
  this.post = post;
  this.category = category
  this.pub = pub
}

module.exports = Post;

//存储一篇文章及其相关信息
Post.prototype.save = function(callback) {
  var date = new Date();
  //存储各种时间格式，方便以后扩展
  var time = {
      date: date,
      year : date.getFullYear(),
      month : date.getFullYear() + "-" + (date.getMonth() + 1),
      day : date.getFullYear() + "-" + (date.getMonth() + 1) + "-" + date.getDate(),
      minute : date.getFullYear() + "-" + (date.getMonth() + 1) + "-" + date.getDate() + " " + 
      date.getHours() + ":" + (date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()) 
  }
  let nPub="";
  if(this.pub == "on"){
      nPub = 0
  }else{
      nPub = 1
  }
  //要存入数据库的文档 
  var post = {
      name: this.name,
      time: time,
      title: this.title,
      post: this.post,

      //分类
      category:this.category || 0,

      //被喜欢量
      like: 0,

      //阅读量
      read: 0,

      //留言
      comments:[],

      //是否对外
      pub:nPub
  };
  //打开数据库
  mongodb.open(function (err, db) {
    if (err) {
      return callback(err);
    }
    //读取 posts 集合
    db.collection('posts', function (err, collection) {
      if (err) {
        mongodb.close();
        return callback(err);
      }
      //将文档插入 posts 集合
      collection.insert(post, {
        safe: true
      }, function (err) {
        mongodb.close();
        if (err) {
          return callback(err);//失败！返回 err
        }
        callback(null);//返回 err 为 null
      });
    });
  });
};

//读取文章及其相关信息
Post.get = function(query, callback) {
  //打开数据库
  mongodb.open(function (err, db) {
    if (err) {
      return callback(err);
    }
    //读取 posts 集合
    db.collection('posts', function(err, collection) {
      if (err) {
        mongodb.close();
        return callback(err);
      }
      collection.find(query).sort({
        read:-1,
        time: -1
      }).toArray(function (err, docs) {
        mongodb.close();
        if (err) {
          return callback(err);//失败！返回 err
        }
        docs.forEach((doc)=>{
          doc.post = marked(doc.post)
        })
        callback(null, docs);//成功！以数组形式返回查询的结果
      });
    });
  });
};

//读取文章及其相关信息
Post.getOne = function(query, callback) {
  //打开数据库
  mongodb.open(function (err, db) {
    if (err) {
      return callback(err);
    }
    //读取 posts 集合
    db.collection('posts', function(err, collection) {
      if (err) {
        mongodb.close();
        return callback(err);
      }
      //根据 query 对象查询文章
      collection.findOne(query,function (err, doc) {
        // mongodb.close();
        if (err) {
          return callback(err);//失败！返回 err
        }
        collection.update(query,{$inc:{read:1}},function (err1,result) {
          mongodb.close();
          if (err1) {
            return callback(err1);//失败！返回 err
          }
        });

        // console.log(doc)
        doc.post = marked(doc.post)
        // if(doc){
          
        //   doc.comments.forEach(function(comment){
        //     comment.content = markdown.toHTML(comment.content)
        //   })
        // }
        
        callback(null, doc);//成功！以数组形式返回查询的结果
        
      });
    });
  });
};

//读取文章及其相关信息
Post.countReadTimes = function(query, callback) {
  //打开数据库
  mongodb.open(function (err, db) {
    if (err) {
      return callback(err);
    }
    //读取 posts 集合
    db.collection('posts', function(err, collection) {
      if (err) {
        mongodb.close();
        return callback(err);
      }
      collection.find(query).toArray(function (err, doc) {
        // mongodb.close();
        if (err) {
          return callback(err);//失败！返回 err
        }
        // console.log(doc[0])
        collection.update(query,{$inc:{read:1}},function (err1,result) {
          mongodb.close();
          if (err1) {
            return callback(err1);//失败！返回 err
          }
          callback(null,result);//成功！以数组形式返回查询的结果
        });
      });
    });
  });
};

//读取文章及其相关信息
Post.edit = function(query, callback) {
  //打开数据库
  mongodb.open(function (err, db) {
    if (err) {
      return callback(err);
    }
    //读取 posts 集合
    db.collection('posts', function(err, collection) {
      if (err) {
        mongodb.close();
        return callback(err);
      }
      //根据 query 对象查询文章
      collection.findOne(query,function (err, doc) {
        mongodb.close();
        if (err) {
          return callback(err);//失败！返回 err
        }
        // console.log(doc)
        // doc.post = markdown.toHTML(doc.post)
        doc.phtml = marked(doc.post)
        callback(null, doc);//成功！以数组形式返回查询的结果
      });
    });
  });
};

//读取文章及其相关信息
Post.update = function(query, callback) {
  var date = new Date();
  //存储各种时间格式，方便以后扩展
  var time = {
    date: date,
    year : date.getFullYear(),
    month : date.getFullYear() + "-" + (date.getMonth() + 1),
    day : date.getFullYear() + "-" + (date.getMonth() + 1) + "-" + date.getDate(),
    minute : date.getFullYear() + "-" + (date.getMonth() + 1) + "-" + date.getDate() + " " + 
    date.getHours() + ":" + (date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()) 
}
  //打开数据库
  mongodb.open(function (err, db) {
    if (err) {
      return callback(err);
    }
    //读取 posts 集合
    db.collection('posts', function(err, collection) {
      if (err) {
        mongodb.close();
        return callback(err);
      }
      if(query.pub == "on"){
        query.pub = 0
      }else{
        query.pub = 1
      }
      // return
      //根据 query 对象查询文章
      collection.update({"_id":query.id},{$set:{post:query.post,title:query.title,time:time,pub:query.pub}},function (err,doc) {
        mongodb.close();
        if (err) {
          return callback(err);//失败！返回 err
        }
        callback(null,doc);//成功！以数组形式返回查询的结果
      });
    });
  });
};

//读取文章及其相关信息
Post.remove = function(query, callback) {
  //打开数据库
  mongodb.open(function (err, db) {
    if (err) {
      return callback(err);
    }
    //读取 posts 集合
    db.collection('posts', function(err, collection) {
      if (err) {
        mongodb.close();
        return callback(err);
      }
      // console.log(query.post)
      //根据 query 对象查询文章
      collection.remove({"_id":query.id},{w:1},function (err) {
        mongodb.close();
        if (err) {
          return callback(err);//失败！返回 err
        }
        callback(null);//成功！以数组形式返回查询的结果
      });
    });
  });
};

//读取10条
Post.getTen = function(query,page, callback) {
  //打开数据库
  mongodb.open(function (err, db) {
    if (err) {
      return callback(err);
    }
    //读取 posts 集合
    db.collection('posts', function(err, collection) {
      if (err) {
        mongodb.close();
        return callback(err);
      }
      // var query  = {};
      // if(name){
      //   query.name = name;
      // }

      collection.count(query,function(err,total){
        collection.find(query,{
          skip:(page-1)*10,
          limit:10
        }).sort({
          read:-1,
          time:-1
        }).toArray(function(err,docs){
          mongodb.close();
          if(err){
            return callback(err);
          }
          docs.forEach(function(doc){
            doc.post = marked(doc.post);
          });
          callback(null,docs,total)
        });

      });

    });
  });
};